package it.azienda.managerworkstandard.view;

import it.azienda.framework.persistenza.DAOConnectionSingleton;
import it.azienda.framework.utilita.Utilita;
import it.azienda.framework.view.Dettaglio;
import it.azienda.managerworkstandard.modello.BeanCategoriaFor;
import it.azienda.managerworkstandard.modello.BeanComune;
import it.azienda.managerworkstandard.modello.BeanFornitore;
import it.azienda.managerworkstandard.modello.BeanLogin;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.component.html.HtmlForm;
import javax.faces.component.html.HtmlInputText;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class DettaglioFornitore extends Dettaglio{
    
    private HtmlForm form = new HtmlForm();
    private BeanFornitore beanFornitore;
    private ArrayList listaFornitoreCont=new ArrayList();
    
    public void setBeanFornitore(BeanFornitore beanFornitore) {
        setObj(beanFornitore);
        this.beanFornitore = beanFornitore;
    }
    
    public BeanFornitore getBeanFornitore(){
        return (BeanFornitore)getObj();
    }
    
    public HtmlForm getForm() {
        form = (HtmlForm) Utilita.getSession().getAttribute("form");
        if (form == null) {
            form = new HtmlForm();
        }
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanFornitore =(BeanFornitore) ctx.getExternalContext().getRequestMap().get("beanFornitore");
        controlloDopoSalvataggio(beanFornitore);
        Utilita.getSession().removeAttribute("form");
        return form;
    }
    
    public void setForm(HtmlForm form) {
        setFormObject(form);
        this.form = form;
        Utilita.getSession().setAttribute("form",form);
    }
    
    public void svuotaLookup() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanFornitore =(BeanFornitore) ctx.getExternalContext().getRequestMap().get("beanFornitore");
        setObj(beanFornitore);
        
        String nomeBean=Utilita.getRequest().getParameter("bean");
        if(nomeBean.equals("beanComuneResidenza")){
            ((HtmlInputText) form.findComponent("descrizioneComune_Residenza")).setSubmittedValue(null);
            ((HtmlInputText) form.findComponent("cap_Residenza")).setSubmittedValue(null);
            beanFornitore.setBeanComuneResidenza(new BeanComune());
            setObj(beanFornitore);
        }else if(nomeBean.equals("beanCategoriaFor")){
            ((HtmlInputText) form.findComponent("descrizioneCategoriaFor")).setSubmittedValue(null);
            ((HtmlInputText) form.findComponent("codiceCategoriaFor")).setSubmittedValue(null);
            beanFornitore.setBeanCategoriaFor(new BeanCategoriaFor());
            setObj(beanFornitore);
        }
        ctx.renderResponse();
    }
    
    public void lookUp(ValueChangeEvent event) {
        if(event.getOldValue() != null && event.getNewValue()!=null ){
            if(!event.getOldValue().toString().toUpperCase().equals(event.getNewValue().toString().toUpperCase())){
                if(event.getNewValue().toString().length()>=1 ){
                    
                    FacesContext ctx = FacesContext.getCurrentInstance();
                    beanFornitore =(BeanFornitore) ctx.getExternalContext().getRequestMap().get("beanFornitore");
                    setObj(beanFornitore);
                    String descrizione=new String(""+event.getNewValue());
                    
                    String nomeBean=(String)event.getComponent().getAttributes().get("nomeBean");
                    String nomeBeanLookUp =(String)event.getComponent().getAttributes().get("nomeBeanLookUp");
                    
                    if(nomeBean.equals("beanComuneResidenza")){
                        BeanComune comuneResidenza=(BeanComune)lookUpRapido(descrizione.toUpperCase(),nomeBeanLookUp);
                        if (comuneResidenza == null) {
                            ((HtmlInputText) form.findComponent("descrizioneComune_Residenza")).setSubmittedValue(null);
                            ((HtmlInputText) form.findComponent("cap_Residenza")).setSubmittedValue(null);
                            beanFornitore.setBeanComuneResidenza(new BeanComune());
                            setObj(beanFornitore);
                            HtmlForm form = (HtmlForm)ctx.getViewRoot().findComponent("erroriDataBase");
                            form.setRendered(true);
                            ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase","Comune inesistente"));
                        } else {
                            beanFornitore.setBeanComuneResidenza(comuneResidenza);
                            setObj(beanFornitore);
                            ((HtmlInputText) form.findComponent("descrizioneComune_Residenza")).setSubmittedValue(comuneResidenza.getDescrizione());
                            ((HtmlInputText) form.findComponent("cap_Residenza")).setSubmittedValue(comuneResidenza.getCap());
                        }
                    }
                    
                    if(nomeBean.equals("beanCategoriaFor")){
                        BeanCategoriaFor categoria=(BeanCategoriaFor)lookUpRapido(descrizione.toUpperCase(),nomeBeanLookUp);
                        if (categoria == null) {
                            ((HtmlInputText) form.findComponent("descrizioneCategoriaFor")).setSubmittedValue(null);
                            ((HtmlInputText) form.findComponent("codiceCategoriaFor")).setSubmittedValue(null);
                            beanFornitore.setBeanCategoriaFor(new BeanCategoriaFor());
                            setObj(beanFornitore);
                            HtmlForm form = (HtmlForm)ctx.getViewRoot().findComponent("erroriDataBase");
                            form.setRendered(true);
                            ctx.addMessage("erroriDataBase", new FacesMessage("erroriDataBase","Categoria inesistente"));
                        } else {
                            beanFornitore.setBeanCategoriaFor(categoria);
                            setObj(beanFornitore);
                            ((HtmlInputText) form.findComponent("descrizioneCategoriaFor")).setSubmittedValue(categoria.getDescrizione());
                        }
                    }
                    setObj(beanFornitore);
                    ctx.renderResponse();
                }
            }
        }
    }
    
    public boolean controlliPrimaSalvataggio() {
        FacesContext ctx = FacesContext.getCurrentInstance();
        beanFornitore =(BeanFornitore) ctx.getExternalContext().getRequestMap().get("beanFornitore");
        boolean errori = false;
        if(beanFornitore.getBeanComuneResidenza()!= null) {
            if(beanFornitore.getBeanComuneResidenza().getId() == null) {
                beanFornitore.setBeanComuneResidenza(null);
            }
        }
        
        if(beanFornitore.getBeanCategoriaFor()!= null) {
            if(beanFornitore.getBeanCategoriaFor().getId() == null) {
                beanFornitore.setBeanCategoriaFor(null);
            }
        }
        
        if(beanFornitore.getId() == null){
            String query=" select max(fornitori.codice) from BeanFornitore fornitori";
            Session session = null;
            Transaction tr = null;
            try {
                session = DAOConnectionSingleton.newSession();
                tr = session.beginTransaction();
                Query q = null;
                q = session.createQuery(query);
                ArrayList listaCodice = (ArrayList) q.list();
                Integer cod=(Integer) listaCodice.get(0);
                if(cod!=null){
                    this.beanFornitore.setCodice(new Integer(cod.intValue()+1));
                }else{
                    this.beanFornitore.setCodice(new Integer(1));
                }
            } catch (Exception e) {
            }
        }
        
        if(errori) {
            controlloDopoSalvataggio(beanFornitore);
            return true;
        }
        return false;
    }
    
    public void controlloDopoSalvataggio(Object obj) {
        BeanFornitore fornitore=(BeanFornitore)obj;
        if(fornitore.getBeanComuneResidenza()==null){
            fornitore.setBeanComuneResidenza(new BeanComune());
        }
        if(fornitore.getBeanCategoriaFor()==null){
            fornitore.setBeanCategoriaFor(new BeanCategoriaFor());
        }
    }
    
    
    public void caricaStoricoFornitore(Integer idFornitore, Integer tab){
        FacesContext ctx = FacesContext.getCurrentInstance();
        DettaglioFornitore dettaglio=(DettaglioFornitore) ctx.getApplication().getVariableResolver().resolveVariable(ctx, "dettaglioFornitore");
        
        Query q=null;
        String query="";
        if(tab.intValue()==1){
            DettaglioFornitoreCont dettaglioFornitoreCont=new DettaglioFornitoreCont();
            ArrayList listaCont = dettaglioFornitoreCont.situazione(idFornitore);
            dettaglio.setListaFornitoreCont(listaCont);
            BeanLogin login=(BeanLogin)Utilita.getSession().getAttribute("login");
            login.settaHashMapStorico2(listaCont);
            Utilita.getSession().removeAttribute("login");
            Utilita.getSession().setAttribute("login",login);
            Utilita.getRequest().setAttribute("dettaglioFornitore",dettaglio);
            return;
        }
    }
    
    public ArrayList getListaFornitoreCont() {
        return listaFornitoreCont;
    }
    
    public void setListaFornitoreCont(ArrayList listaFornitoreCont) {
        this.listaFornitoreCont = listaFornitoreCont;
    }
    
}